package pe.gob.osinergmin.service.impl;

import android.content.Context;

import java.util.ArrayList;
import java.util.List;

import pe.gob.osinergmin.bean.common.OrdenPedido;
import pe.gob.osinergmin.dao.OrdenPedidoDAO;
import pe.gob.osinergmin.dao.impl.OrdenPedidoDAOImpl;
import pe.gob.osinergmin.service.OrdenPedidoService;
import pe.gob.osinergmin.utils.PuntoControlUtils;

public class OrdenPedidoServiceImpl implements OrdenPedidoService {

    private static OrdenPedidoDAO ordenPedidoDAO;

    private static OrdenPedidoServiceImpl instance;

    public OrdenPedidoServiceImpl() {
        super();
        this.ordenPedidoDAO = OrdenPedidoDAOImpl.getInstance();
    }

    @Override
    public List<String> getOrdenPedidoFromPlacaList(Context context, String placa) throws Exception {
        List<OrdenPedido> ordenPedidoList = getOrdenPedidoList(context, null);
        List<String> result = null;
        if(ordenPedidoList != null){
            for(OrdenPedido ordenPedido : ordenPedidoList){
                if(ordenPedido.getPlaca().equalsIgnoreCase(placa)){
                    if(result == null) result = new ArrayList<>();
                    result.add(ordenPedido.getCodigoAutorizacion());
                }
            }
        }
        return result;
    }

    @Override
    public List<OrdenPedido> getOrdenPedidoList(Context context, OrdenPedido ordenPedido) throws Exception {
        List<OrdenPedido> ordenPedidoList = ordenPedidoDAO.getOrdenPedidoList(context);
        List<OrdenPedido> result = null;
        if(ordenPedido != null){
            for(OrdenPedido _ordenPedido : ordenPedidoList){
                if(PuntoControlUtils.compareObjects(_ordenPedido, ordenPedido)){
                    if(result == null) result = new ArrayList<>();
                    result.add(_ordenPedido);
                }
            }
        }else{
            result = ordenPedidoList;
        }
        return result;
    }

    @Override
    public void saveOrdenPedidoListToLocal(Context context, List<OrdenPedido> ordenPedidoList) throws Exception {
        ordenPedidoDAO.saveOrdenPedidoListToLocal(context, ordenPedidoList);
    }

    @Override
    public void deleteOrdenPedidoListFromLocal(Context context) throws Exception {
        ordenPedidoDAO.deleteOrdenPedidoListFromLocal(context);
    }

    public static OrdenPedidoServiceImpl getInstance(){
        if(instance == null){
            instance = new OrdenPedidoServiceImpl();
        }
        return instance;
    }
}
